package com.itheima.task;

import com.itheima.common.utils.AliOssUtil;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

@Component
public class RedisTask {
    @Autowired
    private AliOssUtil aliOssUtil;
    @Autowired
    private RedisTemplate redisTemplate;

    @Scheduled(cron = "0 0/5 * * * *")
    public void taskRedis(){
        List<String> setmealPic = redisTemplate.opsForList().range("setmealPic", 0, -1);
        List<String> setmealPicUpload = redisTemplate.opsForList().range("setmealPicUpload", 0, -1);
        // 找出 setmealPicUpload 中有但 setmealPic 中没有的元素
        Set<String> setmealPicSet = null;
        if (setmealPic != null) {
            setmealPicSet = new HashSet<>(setmealPic);
        }
        Set<String> setmealPicUploadSet = null;
        if (setmealPicUpload != null) {
            setmealPicUploadSet = new HashSet<>(setmealPicUpload);
        }

        if (setmealPicSet != null) {
            if (setmealPicUploadSet != null) {
                setmealPicUploadSet.removeAll(setmealPicSet);
                for (String pic : setmealPicUploadSet) {
                    redisTemplate.opsForList().remove("setmealPicUpload",0,pic);
                    String fileName = RedisTask.extractFileNameFromUrl(pic);
                    aliOssUtil.delete(fileName);
                }
            }
        }

    }
    /**
     * 从给定的 URL 中提取文件名
     *
     * @param url 完整的 URL
     * @return 文件名（包括扩展名）
     */
    public static String extractFileNameFromUrl(String url) {
        if (url == null || url.isEmpty()) {
            return "";
        }

        // 去掉 URL 中的协议部分（如果有的话）
        String cleanedUrl = url.replaceFirst("^[^:]+://", "");

        // 分割 URL，获取路径部分
        String[] parts = cleanedUrl.split("/");

        // 获取路径的最后一部分作为文件名
        if (parts.length > 0) {
            return parts[parts.length - 1];
        }

        return "";
    }

}
